package com.ossjk.core.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Months;
import org.joda.time.Seconds;
import org.joda.time.Weeks;
import org.joda.time.Years;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CommonUtil {

	private static Logger log = LoggerFactory.getLogger(CommonUtil.class);

	/**
	 * 去除字符串前后空格
	 *
	 * @param str
	 * @return
	 */
	public static String trim(String str) {
		return StringUtils.trim(str);
	}

	public static boolean isBlank(String str) {
		return StringUtils.isBlank(str);
	}

	/**
	 * 判断是否为空
	 *
	 * @param obj
	 * @return
	 */
	public static boolean isBlank(Object obj) {
		return obj == null || isBlank(obj.toString());
	}

	/**
	 * 判断是否为空
	 *
	 * @param obj
	 * @return
	 */
	public static boolean isBlank(Object[] obj) {
		return obj == null || obj.length == 0;
	}

	/**
	 * 判断是否为空
	 *
	 * @param collection
	 * @return
	 */
	public static boolean isBlank(Collection collection) {
		return collection == null || collection.size() == 0;
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(Object arg1, Object arg2) {
		if (arg1 == null) {
			if (arg2 == null) {
				return true;
			} else {
				return isBlank(arg2);
			}
		} else {
			return arg1.equals(arg2);
		}
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(String arg1, String arg2) {
		return StringUtils.equals(arg1, arg2);

	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(String arg1, int arg2) {
		if (isBlank(arg1)) {
			return false;
		}
		return isEquals(new BigDecimal(arg1), new BigDecimal(arg2));
	}

	/**
	 * 如果都为null则返回true；如果都不为null则判断是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(BigDecimal arg1, BigDecimal arg2) {
		if (arg1 == null) {
			return arg2 == null;
		} else {
			if (arg2 == null) {
				return false;
			}
			return arg1.compareTo(arg2) == 0;
		}
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(String arg1, BigDecimal arg2) {
		if (arg1 == null && arg2 == null) {
			return true;
		} else {
			if (!CommonUtil.isBlank(arg1) && !CommonUtil.isBlank(arg2)) {
				return isEquals(new BigDecimal(arg1), arg2);
			} else {
				return false;
			}
		}

	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(String arg1, long arg2) {
		if (isBlank(arg1)) {
			return false;
		}
		return isEquals(new BigDecimal(arg1), new BigDecimal(arg2));
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(double arg1, int arg2) {
		return isEquals(new BigDecimal(arg1), new BigDecimal(arg2));
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(double arg1, long arg2) {
		return isEquals(new BigDecimal(arg1), new BigDecimal(arg2));
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(int arg1, int arg2) {
		return arg1 == arg2;
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(double arg1, double arg2) {
		return arg1 == arg2;
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(long arg1, long arg2) {
		return arg1 == arg2;
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param dateFormat
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(String arg1, String dateFormat, Date arg2) {
		if (arg1 == null && arg2 == null) {
			return true;
		} else {
			if (!CommonUtil.isBlank(arg1) && !CommonUtil.isBlank(arg2) && !CommonUtil.isBlank(dateFormat)) {
				SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
				return isEquals(arg1, simpleDateFormat.format(arg2));
			} else {
				return false;
			}
		}
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(Date arg1, Date arg2) {
		if (arg1 == null && arg2 == null) {
			return true;
		} else {
			if (!CommonUtil.isBlank(arg1) && !CommonUtil.isBlank(arg2)) {
				return arg1.compareTo(arg2) == 0;
			} else {
				return false;
			}
		}
	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(BigDecimal arg1, int arg2) {
		if (CommonUtil.isBlank(arg1)) {
			return false;
		} else {
			return isEquals(arg1, new BigDecimal(arg2));
		}

	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(BigDecimal arg1, long arg2) {
		if (CommonUtil.isBlank(arg1)) {
			return false;
		} else {
			return isEquals(arg1, new BigDecimal(arg2));
		}

	}

	/**
	 * 是否相等
	 *
	 * @param arg1
	 * @param arg2
	 * @return
	 */
	public static boolean isEquals(BigDecimal arg1, double arg2) {
		if (CommonUtil.isBlank(arg1)) {
			return false;
		} else {
			return isEquals(arg1, new BigDecimal(arg2));
		}

	}

	/**
	 * 判断是否日期
	 *
	 * @param strDate
	 * @param dateFormat
	 * @return
	 */
	public static boolean isDate(String strDate, String dateFormat) {
		if (isBlank(strDate)) {
			return false;
		}

		SimpleDateFormat df = new SimpleDateFormat(dateFormat);
		try {
			Date tmpDate = df.parse(strDate);
			String strTempDate = df.format(tmpDate);
			if (!strTempDate.equals(strDate)) {
				return false;
			}
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	/**
	 * 是否整数
	 *
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String str) {
		String bigStr;
		try {
			bigStr = new BigDecimal(str).toString();
		} catch (Exception e) {
			return false;// 异常 说明包含非数字。
		}
		return true;
	}

	/**
	 * 判断字符串是否纯英文
	 *
	 * @param str
	 * @return
	 */
	public static boolean isEnglish(String str) {
		Pattern pattern = Pattern.compile("^[a-zA-Z]*");
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();

	}

	/**
	 * 判断字符串是否纯中文
	 *
	 * @param str
	 * @return
	 */
	public static boolean isChiness(String str) {
		Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]*");
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();
	}

	/**
	 * 比较
	 *
	 * @param arg1
	 * @param arg2
	 * @return 0-相等、1-比它大、2-比它小
	 */
	public static int compareTo(Date arg1, Date arg2) {
		if (arg1 == null) {
			return arg2 == null ? 0 : -1;
		} else {
			return arg1.compareTo(arg2);
		}
	}

	/**
	 * 比较
	 *
	 * @param arg1
	 * @param arg2
	 * @return 0-相等、1-比它大、2-比它小
	 */
	public static int compareTo(String arg1, String arg2) {
		if (arg1 == null) {
			return arg2 == null ? 0 : -1;
		} else {
			return arg1.compareTo(arg2);
		}
	}

	/**
	 * 比较
	 *
	 * @param arg1
	 * @param arg2
	 * @return 0-相等、1-比它大、2-比它小
	 */
	public static int compareTo(BigDecimal arg1, BigDecimal arg2) {
		if (arg1 == null) {
			return arg2 == null ? 0 : -1;
		} else {
			return arg1.compareTo(arg2);
		}
	}

	/**
	 * 格式日期
	 *
	 * @param date
	 * @param format
	 * @return
	 */
	public static String formatDate(Date date, String format) {
		if (CommonUtil.isBlank(date)) {
			return null;
		}
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		return dateFormat.format(date);
	}

	/**
	 * 转换日期
	 *
	 * @param dateStr
	 * @param format
	 * @return
	 */
	public static Date parseDate(String dateStr, String format) {
		if (CommonUtil.isBlank(dateStr)) {
			return null;
		}
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		try {
			return dateFormat.parse(dateStr);
		} catch (ParseException e) {
			log.error("转换日期出错，请检查{}和{}。", dateStr, format, e);
			return null;
		}
	}

	/**
	 * 保留小数点
	 *
	 * @param num
	 *            数字
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal reserved(String num, int prec) {
		if (!isBlank(num) && isNumeric(num)) {
			return reserved(new BigDecimal(num), prec);
		}
		return null;
	}

	/**
	 * 保留小数点
	 *
	 * @param num
	 *            数字
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal reserved(double num, int prec) {
		if (!isBlank(num)) {
			return reserved(new BigDecimal(num + ""), prec);
		}
		return null;
	}

	/**
	 * 保留小数点
	 *
	 * @param num
	 *            数字
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal reserved(BigDecimal num, int prec) {
		if (!isBlank(num)) {
			return num.setScale(prec, RoundingMode.HALF_UP);
		}
		return null;
	}

	/**
	 * 保留小数点
	 *
	 * @param num
	 *            数字
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal reserved(Object num, int prec) {
		return reserved(num.toString(), prec);
	}

	/**
	 * 相加
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal add(BigDecimal num1, BigDecimal num2, int prec) {
		if (num1 == null || num2 == null) {
			return new BigDecimal(0);
		}
		return num1.add(num2).setScale(prec, RoundingMode.HALF_UP);
	}

	/**
	 * 相加
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal add(long num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return add(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相加
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal add(long num1, long num2, int prec) {
		return add(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相加
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal add(double num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return add(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相加
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal add(double num1, double num2, int prec) {

		return add(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相乘
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal multiply(BigDecimal num1, BigDecimal num2, int prec) {
		if (num1 == null || num2 == null) {
			return new BigDecimal(0);
		}
		return num1.multiply(num2).setScale(prec, RoundingMode.HALF_UP);
	}

	/**
	 * 相乘
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal multiply(long num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return multiply(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相乘
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal multiply(long num1, long num2, int prec) {
		return multiply(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相乘
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal multiply(double num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return multiply(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相乘
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal multiply(double num1, double num2, int prec) {

		return multiply(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相除
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal divide(BigDecimal num1, BigDecimal num2, int prec) {
		if (num1 == null || num2 == null) {
			return new BigDecimal(0);
		}
		return num1.divide(num2).setScale(prec, RoundingMode.HALF_UP);
	}

	/**
	 * 相除
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal divide(long num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return divide(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相除
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal divide(long num1, long num2, int prec) {
		return divide(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相除
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal divide(double num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return divide(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相除
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal divide(double num1, double num2, int prec) {
		return divide(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相减
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal subtract(BigDecimal num1, BigDecimal num2, int prec) {
		if (num1 == null || num2 == null) {
			return new BigDecimal(0);
		}
		return num1.subtract(num2).setScale(prec, RoundingMode.HALF_UP);
	}

	/**
	 * 相减
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal subtract(long num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return subtract(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相减
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal subtract(long num1, long num2, int prec) {
		return subtract(new BigDecimal(num1 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 相减
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal subtract(double num1, BigDecimal num2, int prec) {
		if (num2 == null) {
			num2 = new BigDecimal(0);
		}
		return subtract(new BigDecimal(num1 + ""), num2, prec);
	}

	/**
	 * 相减
	 *
	 * @param num1
	 * @param num2
	 * @param prec
	 *            保留几位
	 * @return
	 */
	public static BigDecimal subtract(double num1, double num2, int prec) {
		return subtract(new BigDecimal(num2 + ""), new BigDecimal(num2 + ""), prec);
	}

	/**
	 * 日期运算
	 *
	 * @param date
	 *            日期
	 * @param num
	 *            运算数字
	 * @param type
	 *            DAY|WEEKS|YEARS|MONTHS|SECONDS|MINUTES|HOURS
	 * @return
	 */
	public static Date plusDate(Date date, int num, String type) {
		if (!CommonUtil.isBlank(date)) {
			DateTime dateTime = new DateTime(date);
			if (CommonConstant.DATE_DAYS_TYPE.equals(type)) {
				return dateTime.plusDays(num).toDate();
			} else if (CommonConstant.DATE_WEEKS_TYPE.equals(type)) {
				return dateTime.plusWeeks(num).toDate();
			} else if (CommonConstant.DATE_MONTHS_TYPE.equals(type)) {
				return dateTime.plusMonths(num).toDate();
			} else if (CommonConstant.DATE_YEARS_TYPE.equals(type)) {
				return dateTime.plusYears(num).toDate();
			} else if (CommonConstant.DATE_SECONDS_TYPE.equals(type)) {
				return dateTime.plusSeconds(num).toDate();
			} else if (CommonConstant.DATE_MINUTES_TYPE.equals(type)) {
				return dateTime.plusMinutes(num).toDate();
			} else if (CommonConstant.DATE_HOURS_TYPE.equals(type)) {
				return dateTime.plusHours(num).toDate();
			}
		}
		return date;
	}

	/**
	 * 日期相差
	 *
	 * @param date1
	 *            开始日期
	 * @param date2
	 *            结束日期
	 * @param type
	 *            DAY|WEEKS|YEARS|MONTHS|SECONDS|MINUTES|HOURS
	 * @return
	 */
	public static int diffDate(Date date1, Date date2, String type) {
		if (!CommonUtil.isBlank(date1) && !CommonUtil.isBlank(date2)) {
			DateTime dateTime1 = new DateTime(date1);
			DateTime dateTime2 = new DateTime(date2);
			if (CommonConstant.DATE_DAYS_TYPE.equals(type)) {
				return Days.daysBetween(dateTime1, dateTime2).getDays();
			} else if (CommonConstant.DATE_WEEKS_TYPE.equals(type)) {
				return Weeks.weeksBetween(dateTime1, dateTime2).getWeeks();
			} else if (CommonConstant.DATE_MONTHS_TYPE.equals(type)) {
				return Months.monthsBetween(dateTime1, dateTime2).getMonths();
			} else if (CommonConstant.DATE_YEARS_TYPE.equals(type)) {
				return Years.yearsBetween(dateTime1, dateTime2).getYears();
			} else if (CommonConstant.DATE_SECONDS_TYPE.equals(type)) {
				return Seconds.secondsBetween(dateTime1, dateTime2).getSeconds();
			} else if (CommonConstant.DATE_MINUTES_TYPE.equals(type)) {
				return Minutes.minutesBetween(dateTime1, dateTime2).getMinutes();
			} else if (CommonConstant.DATE_HOURS_TYPE.equals(type)) {
				return Hours.hoursBetween(dateTime1, dateTime2).getHours();
			}
		}
		return 0;
	}

	/**
	 * 转换为字符串.
	 *
	 * @param obj
	 * @return
	 */
	public static String String2(double obj) {
		return "" + obj;
	}

	/**
	 * 转换为字符串.
	 *
	 * @param obj
	 * @return
	 */
	public static String String2(int obj) {
		return "" + obj;
	}

	/**
	 * 转换为字符串.
	 *
	 * @param obj
	 * @return
	 */
	public static String String2(long obj) {
		return "" + obj;
	}

	/**
	 * 转换为字符串.
	 *
	 * @param obj
	 * @return
	 */
	public static String String2(Object obj) {
		if (obj instanceof Double || obj instanceof Integer || obj instanceof Long) {
			BigDecimal bigDecimal;
			if (obj instanceof Double) {
				bigDecimal = new BigDecimal((Double) obj);
				return bigDecimal.toString();
			} else if (obj instanceof Integer) {
				return ((Integer) obj).toString();
			} else {
				return ((Long) obj).toString();
			}
		}
		if (obj != null) {
			return obj.toString();
		}
		return "";
	}

	/**
	 * 转换为int类型
	 *
	 * @param obj
	 * @return
	 */
	public static int int2(Object obj) {
		if (obj instanceof Integer) {
			return (Integer) obj;
		}
		if (obj instanceof BigDecimal) {
			return int2((BigDecimal) obj);
		}
		if (obj instanceof Double) {
			return int2(new BigDecimal((Double) obj));
		}
		if (obj != null) {
			return int2(obj.toString());
		}
		return 0;
	}

	/**
	 * 转换为int类型
	 *
	 * @param bigDecimal
	 * @return
	 */
	public static int int2(BigDecimal bigDecimal) {
		if (CommonUtil.isBlank(bigDecimal)) {
			return 0;
		}
		return bigDecimal.intValue();
	}

	/**
	 * 转换为int类型
	 *
	 * @param str
	 * @return
	 */
	public static int int2(String str) {
		if (CommonUtil.isBlank(str) || !CommonUtil.isNumeric(str)) {
			return 0;
		}
		try {
			return int2(new BigDecimal(str));
		} catch (Exception ex) {
			return 0;
		}
	}

	/**
	 * 转换为double类型
	 *
	 * @param obj
	 * @return
	 */
	public static double double2(Object obj) {
		if (obj == null) {
			return 0;
		}
		if (obj instanceof Double) {
			return (Double) obj;
		}
		if (obj instanceof BigDecimal) {
			return double2((BigDecimal) obj);
		}
		return double2(obj.toString());
	}

	/**
	 * 转换为double类型
	 *
	 * @param bigDecimal
	 * @return
	 */
	public static double double2(BigDecimal bigDecimal) {
		if (CommonUtil.isBlank(bigDecimal)) {
			return 0;
		}
		return bigDecimal.doubleValue();
	}

	/**
	 * 转换为double类型
	 *
	 * @param str
	 * @return
	 */
	public static double double2(String str) {
		if (CommonUtil.isBlank(str) || !CommonUtil.isNumeric(str)) {
			return 0;
		}
		try {
			return double2(str);
		} catch (Exception ex) {
			return 0;
		}
	}

	/**
	 * 转换为long类型
	 *
	 * @param obj
	 * @return
	 */
	public static long long2(Object obj) {
		if (obj == null) {
			return 0;
		}
		if (obj instanceof Double) {
			return long2(new BigDecimal((Double) obj));
		}
		if (obj instanceof Long) {
			return (Long) obj;
		}
		if (obj instanceof BigDecimal) {
			return long2((BigDecimal) obj);
		}
		return long2(obj.toString());
	}

	/**
	 * 转换为long类型
	 *
	 * @param bigDecimal
	 * @return
	 */
	public static long long2(BigDecimal bigDecimal) {
		if (CommonUtil.isBlank(bigDecimal)) {
			return 0;
		}
		return bigDecimal.longValue();
	}

	/**
	 * 转换为long类型
	 *
	 * @param str
	 * @return
	 */
	public static long long2(String str) {
		if (CommonUtil.isBlank(str) || !CommonUtil.isNumeric(str)) {
			return 0;
		}
		try {
			return long2(str);
		} catch (Exception ex) {
			return 0;
		}
	}

	/**
	 * 填充前缀
	 *
	 * @param str
	 *            内容
	 * @param length
	 *            长度
	 * @param content
	 *            填充物
	 * @return
	 */
	public static String fillPrefix(Object str, int length, Object content) {
		String result=null;
		if (length > 0) {
			if(!CommonUtil.isBlank(str)){
				result=str.toString();
				while(result.length()<length){
					result = content.toString()+result;
				}
			}
		}
		return result;
	}

	/**
	 * 填充后缀
	 *
	 * @param str
	 *            内容
	 * @param length
	 *            长度
	 * @param content
	 *            填充物
	 * @return
	 */
	public static String fillSuffix(Object str, int length, Object content) {
		String result=null;
		if (length > 0) {
			if(!CommonUtil.isBlank(str)){
				result=str.toString();
				while(result.length()<length){
					result = result+content.toString();
				}
			}
		}
		return result;
	}

	public static int compare(Comparable obj1, Comparable obj2) {
		if (CommonUtil.isBlank(obj1) && CommonUtil.isBlank(obj2)) {
			return 0;
		}
		if (!CommonUtil.isBlank(obj1)) {
			return obj1.compareTo(obj2);
		}
		return -1;
	}

	public static String getUUID() {
		return UUID.randomUUID().toString().replace("-", "");
	}

	public static void main(String[] args) {

		System.out.println(CommonUtil.isNumeric("1112a"));
	}
}